menutrackeritem: be defensive during finalize
authorChristian Hergert <chergert@redhat.com>
Fri, 24 Jun 2022 20:50:08 +0000 (13:50 -0700)
committerChristian Hergert <chergert@redhat.com>
Fri, 24 Jun 2022 21:30:31 +0000 (14:30 -0700)
The menu/action system tends to be incredibly re-entrant, and while fixing
the misuse during finalization cycles should be a priority, this can help
protect just a bit more.

Related #5009

gtk/gtkmenutrackeritem.c

index cccfb48a851b3ddca86a596a920ae5a992ee4770..11db1f4abb361ba63961e9cd10014cbaec92d055 100644 (file)
@@ -201,13 +201,10 @@ gtk_menu_tracker_item_finalize (GObject *object)
 {
   GtkMenuTrackerItem *self = GTK_MENU_TRACKER_ITEM (object);
 
-  g_free (self->action_namespace);
-  g_free (self->action_and_target);
-
-  if (self->observable)
-    g_object_unref (self->observable);
-
-  g_object_unref (self->item);
+  g_clear_pointer (&self->action_namespace, g_free);
+  g_clear_pointer (&self->action_and_target, g_free);
+  g_clear_object (&self->observable);
+  g_clear_object (&self->item);
 
   G_OBJECT_CLASS (gtk_menu_tracker_item_parent_class)->finalize (object);
 }
@@ -884,7 +881,7 @@ gtk_menu_tracker_opener_finalize (GObject *object)
 
   gtk_menu_tracker_item_set_submenu_shown (opener->item, FALSE);
 
-  g_free (opener->submenu_action);
+  g_clear_pointer (&opener->submenu_action, g_free);
 
   G_OBJECT_CLASS (gtk_menu_tracker_opener_parent_class)->finalize (object);
 }